package com.cskaoyan.javase.oop3._2inner._5anonymous._3exercise;

/**
 * 不修改main方法和接口Inter的前提下
 * 补齐Outer类代码，要求在控制台输出HelloWorld
 *
 * 分析:
 *      1.Outer.method()是一个类名点调用方法,说明method方法是Outer类的静态成员方法
 *      2.Outer.method()可以继续链式调用show方法,而show方法是接口中的抽象方法
 *          说明: Outer.method()方法的调用结果是一个接口Inter的子类对象
 *      3.接口中抽象方法show的实现是在控制台输出hello world
 *
 * @since 16:22
 * @author wuguidong@cskaoyan.onaliyun.com
 */

public class Test {
    public static void main(String[] args) {
        Outer.method().show();
    }
}

interface Inter {
    void show();
}

class Outer {
    public static Inter method() {
        // 方式一
        // return new InterImpl();
        // 方式二,用局部内部类
        /*class InterImplLocal implements Inter {
            @Override
            public void show() {
                System.out.println("hello world!");
            }
        }
        return new InterImplLocal();*/
        // 方式三,使用匿名内部类对象
        /*return new Inter() {
            @Override
            public void show() {

                System.out.println("hello world!");
            }
        };*/

        // 方式四,使用Lambda表达式
        return () -> System.out.println("hello world!");
    }

}

// 1.最朴素的方式,手写接口的实现类
class InterImpl implements Inter {
    @Override
    public void show() {
        System.out.println("hello world!");
    }
}